#include<stdlib.h>
#include<stdio.h>
#include "patient.h"


void saisir_patient(Patient *pt, char* fichier_patient, int numero_dossier, int e, int existe)
{
	printf("donner le nom du patient: \n");
	scanf("%s",pt->nom);
	printf("donner son prenom : \n");
	scanf("%s",pt->prenom);
        
      do
      { printf("donner son age: \n");
	scanf("%d",&(pt->age));
      } while ((pt->age<0)|| (pt->age>120));        

      do
      { printf("donner le numéro de CIN: \n");
        scanf("%d",&(pt->CIN));
      } while ( (pt->CIN <10000000) || (pt->CIN> 99999999));
        
        printf ("donner la date d'entrée au clinique \n");

      do
       { printf("le jour:   ");
         scanf("%d", &(pt->date_entre.jour));
       } while (( pt->date_entre.jour <0) || (pt->date_entre.jour >31));

       
      do
       { printf("le mois:   ");
         scanf("%d", &(pt->date_entre.mois));
       } while (( pt->date_entre.mois <0) || (pt->date_entre.mois >12));
       
        printf("l'année:   ");
         scanf("%d", &(pt->date_entre.annee));
       
      do 
      { printf("donner le numéro du dossier: \n");
	scanf("%d",&(pt->num_dossier));
        numero_dossier=pt->num_dossier;
        e=num_dossier_unique(fichier_patient,numero_dossier, existe);

      } while (e==1);
}



/******************************************************************/

void enregistrer_patient(char fichier_patient[], Patient *pt, int numero_dossier, int e, int existe)
{
  FILE * f;
  f=fopen(fichier_patient,"ab");
  if(f!=NULL)
  { 
     saisir_patient(pt,fichier_patient,numero_dossier,e, existe);
     fwrite(pt,sizeof(Patient),1,f);
  }
fclose(f);
}




/**********************************************************************/
int num_dossier_unique(char fichier_patient[], int numero_dossier, int existe)
{ FILE *f;
   Patient pt;

   f=fopen(fichier_patient,"rb");
   if (f!= NULL)
      {
         while (fread(&pt,sizeof(Patient),1,f)!= 0)
             {
            if( numero_dossier==pt.num_dossier)
                { existe=1;
                } 

            }

         }

fclose(f);
return(existe);
}




/*******************************************************************/

void liste_patient(char fichier_patient[])
{
  FILE *f;
  Patient pt;
  f=fopen(fichier_patient,"rb");
  if (f!= NULL)
     {
        printf("\n -- Liste des patients  -- \n"); 
        printf("-----------------------\n");
        while (fread(&pt,sizeof(Patient),1,f)!= 0)
       {
        printf("%s %s - %d - %d  - %d/%d/%d - %d\n", pt.nom, pt.prenom, pt.age,pt.CIN, pt.date_entre.jour, pt.date_entre.mois, pt.date_entre.annee, pt.num_dossier);
       }
     }
      printf("-----------------------\n");
fclose(f);
}
/************************************************************************/


int rechercher_patient_dossier (char fichier_patient[], int numero_dossier)
{  
   FILE *f;
   Patient pt;

   f=fopen(fichier_patient,"rb");
   if (f!= NULL)
      {
         while (fread(&pt,sizeof(Patient),1,f)!= 0)
             {
            if( numero_dossier==pt.num_dossier)
               { printf("-----------------------\n");
                 printf("le dossier numéro %d correspond à: \n nom: %s \n prenom: %s \n age: %d \n CIN: %d \n date d'entée au clinique: %d/%d/%d\n", pt.num_dossier, pt.nom, pt.prenom, pt.age, pt.CIN, pt.date_entre.jour, pt.date_entre.mois, pt.date_entre.annee );
                 printf("-----------------------\n");
                 
                 
                 return (1);
               }
             
     
             }
       printf("-----------------------\n");
       printf("\nce numéro de dossier ne correspond à aucun patient dans la liste. \n");
       printf("-----------------------\n");
       
       return (0);
      
   }
fclose(f);

}

/**********************************************************************/
int rechercher_patient_CIN (char fichier_patient[], int CIN)
{  
   FILE *f;
   Patient pt;

   f=fopen(fichier_patient,"rb");
   if (f!= NULL)
      {
         while (fread(&pt,sizeof(Patient),1,f)!= 0)
             {
            if( CIN==pt.CIN)
               { printf("-----------------------\n");
                 printf("ce numéro de CIN %d correspond à: \n nom: %s \n prenom: %s \n age: %d  \n date d'entée au clinique: %d/%d/%d\n numéro de dossier: %d\n", pt.CIN, pt.nom, pt.prenom, pt.age, pt.date_entre.jour, pt.date_entre.mois, pt.date_entre.annee, pt.num_dossier );
                 printf("-----------------------\n");
                 
                 
                 return (1);
               }
             
     
             }
       printf("-----------------------\n");
       printf("\nce numéro de CIN ne correspond à aucun patient dans la liste. \n");
       printf("-----------------------\n");
       
       return (0);
      
   }
fclose(f);

}


/****************************************************************/
int rechercher_patient_date (char fichier_patient[], int jour, int mois, int annee)
{  
   FILE *f;
   Patient pt;

   f=fopen(fichier_patient,"rb");
   if (f!= NULL)
      {
         while (fread(&pt,sizeof(Patient),1,f)!= 0)
             {  if( (jour==pt.date_entre.jour) && (mois==pt.date_entre.mois) && (annee==pt.date_entre.annee))
                
                { printf("-----------------------\n");
                 printf("nom: %s  prenom: %s  age: %d   CIN : %d  numéro de dossier: %d\n", pt.nom, pt.prenom, pt.age,  pt.CIN, pt.num_dossier );
                 printf("-----------------------\n");
               }
             
     
             }
       
   }
fclose(f);
return (0);
}


/****************************************************************/


void supprimer_patient_dossier( char fichier_patient[], int E, int numero_dossier)
{ 
    char tmp[]="tmp.txt";
    FILE *f ;
    FILE *t ;
    Patient pt;
    int existe;

  E= rechercher_patient_dossier (fichier_patient, numero_dossier);

   

   if (E ==0)
    {printf("\n-\n");
    }  


  else if (E ==1)
  {

    f=fopen(fichier_patient,"rb") ;
    t=fopen(tmp,"wb") ;

    if (f!= NULL && t!=NULL)
     {
      while(fread(&pt,sizeof(Patient),1,f)!=0)
       {
          if( pt.num_dossier!=numero_dossier)
            { fwrite(&pt,sizeof(Patient),1,t) ;
            }
        }
       }
      
   
     fclose(f) ;
     fclose(t) ;

     f=fopen(fichier_patient,"wb") ;
     t=fopen(tmp,"rb") ;

     while(fread (&pt,sizeof(Patient),1,t)!=0)
     {fwrite(&pt,sizeof(Patient),1,f) ;}

     fclose(f) ;
     fclose(t) ;

  
   printf("le patient ayant le dossier numéro %d est retiré de la liste\n",numero_dossier );
   printf("-----------------------\n");
   

  }
}

/*********************************************************************/
void supprimer_patient_CIN( char fichier_patient[], int E, int CIN)
{ 
    char tmp[]="tmp.txt";
    FILE *f ;
    FILE *t ;
    Patient pt;
    int existe;

  E= rechercher_patient_CIN (fichier_patient, CIN);

   

   if (E ==0)
    {printf("\n-\n");
    }  


  else if (E ==1)
  {

    f=fopen(fichier_patient,"rb") ;
    t=fopen(tmp,"wb") ;

    if (f!= NULL && t!=NULL)
     {
      while(fread(&pt,sizeof(Patient),1,f)!=0)
       {
          if( pt.CIN!=CIN)
            { fwrite(&pt,sizeof(Patient),1,t) ;
            }
        }
       }
      
   
     fclose(f) ;
     fclose(t) ;

     f=fopen(fichier_patient,"wb") ;
     t=fopen(tmp,"rb") ;

     while(fread (&pt,sizeof(Patient),1,t)!=0)
     {fwrite(&pt,sizeof(Patient),1,f) ;}

     fclose(f) ;
     fclose(t) ;

  
   printf("le patient ayant la CIN numéro %d est retiré de la liste\n",CIN);
   printf("-----------------------\n");
   

  }
}





/*******************************************************************/
void init_liste_patient(char fichier_patient[])
{
FILE*f;
f=fopen(fichier_patient,"wb");
if(f!=NULL)
{
  printf("la liste est initialisée\n");
}           
fclose(f);
}
